package dxc01;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class demo3 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        /*
        多线程的第三种实现方式
        特点：可以获得多线程运行结果

        1.定义一个类MyCallable实现Callable接口
        2.在MyCallable类中重写call()方法  有返回值的表示多线程运行的结果
        3.创建MyCallable类的对象 表示多线程要执行的任务
        4.创建Future的实现类FutureTask对象，把MyCallable对象作为构造方法的参数  作用：管理多线程运行的结果
        5.创建Thread类的对象，把FutureTask对象作为构造方法的参数 表示线程
        6.启动线程
        7.再调用get方法，就可以获取线程结束之后的结果。
         */


        //创建MyCallable类的对象 表示多线程要执行的任务
        MyCallable m = new MyCallable();
        //创建Future的实现类FutureTask对象，把MyCallable对象作为构造方法的参数
        FutureTask<Integer> f = new FutureTask<>(m);
        //创建Thread类的对象，把FutureTask对象作为构造方法的参数  作用：管理多线程运行的结果
        Thread t1 = new Thread(f);
        t1.start();
        //获取多线程的运行结果
        Integer result = f.get();
        System.out.println(result);

    }
}
